2020-2021 Sunseeker Telemetry and Lighting System
mpu_ex1_threeSeg.c
Go to the documentation of this file.
1 /* --COPYRIGHT--,BSD
2  * Copyright (c) 2017, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  * --/COPYRIGHT--*/
32 //******************************************************************************
56 //******************************************************************************
57 
58 #include "driverlib.h"
59 
60 uint16_t *ptr = 0;
61 uint16_t Data =0;
62 
63 void main(void)
64 {
65  WDT_A_hold(WDT_A_BASE); // Stop WDT
66 
67  //Set P1.0 as an output pin.
68  /*
69 
70  * Select Port 1
71  * Set Pin 0 as output
72  */
73  GPIO_setAsOutputPin(
74  GPIO_PORT_P1,
75  GPIO_PIN0);
76 
77  //Set P3.5 as an output pin.
78  /*
79 
80  * Select Port 3
81  * Set Pin 5 as output
82  */
83 
84  GPIO_setAsOutputPin(
85  GPIO_PORT_P3,
86  GPIO_PIN5
87  );
88 
89  if(MPU_getInterruptStatus(MPU_BASE,MPUSEG2IFG))
90  {
91  //Toggle P1.0 output pin.
92  /*
93 
94  * Select Port 1
95  * Set Pin 0 as output
96  */
97 
98  GPIO_toggleOutputOnPin(
99  GPIO_PORT_P1,
100  GPIO_PIN0
101  );
102 
103  //Toggle P3.5 output pin.
104  /*
105 
106  * Select Port 3
107  * Set Pin 5 as output
108  */
109 
110  GPIO_toggleOutputOnPin(
111  GPIO_PORT_P3,
112  GPIO_PIN5
113  );
114  }
115 
116  __delay_cycles(30000); // Delay to see toggle
117 
118  MPU_enablePUCOnViolation(MPU_BASE,MPU_SECOND_SEG);
119 
120  MPU_initThreeSegmentsParam param = {0};
121  param.seg1boundary = 0x05;
122  param.seg2boundary = 0x08;
123  param.seg1accmask = MPU_READ|MPU_WRITE|MPU_EXEC;
124  param.seg2accmask = MPU_READ;
125  param.seg3accmask = MPU_READ|MPU_WRITE|MPU_EXEC;
126  MPU_initThreeSegments(MPU_BASE, &param);
127 
128  MPU_start(MPU_BASE);
129 
130  Data = 0x88;
131 
132  // Cause an MPU violation by writing to segment 2
133  ptr = (uint16_t *)0xCC02;
134  *ptr = Data;
135 
136 
137  while(1); // Code never gets here
138 }
139 
140 
void main(void)
uint16_t * ptr
uint16_t Data
MPU_initThreeSegmentsParam param
MPU_start(MPU_BASE)
MPU_enablePUCOnViolation(MPU_BASE, MPU_SECOND_SEG)
MPU_initThreeSegments(MPU_BASE, &param)
__delay_cycles(500000)